＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

                        PC-FXGAオーサリングソフトウェア
                    『ＧＭＡＫＥＲ』スタータキット(Ver.1.1)
               ”＿ＳＴＡＲＴＵＰ．Ｏ”、”＿ＳＴＡＣＫ．Ｏ”の解説

                                        日本電気ホームエレクトロニクス株式会社
                                                        １９９６年　５月３０日

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

目次

第１章  ファイル構成

第２章  各ファイルの概要
２．１  _STARTUP.Oの概要
２．２  _STACK.Oの概要
２．３  _STACK.Cの概要

第３章  各ファイルの詳細仕様
３．１  _STARTUP.Oの詳細仕様
３．２  _STACK.O,_STACK.Cの詳細仕様

第４章  ユーザープログラムへの組み込み例
４．１  main()関数を作る
４．２  Ｃコンパイラでコンパイル＆リンクする
４．３  リンカでリンクする

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
第１章  ファイル構成

スタートアップファイルは、以下の３ファイルから構成されます。
－－－－－－－＋－－－－－－－－－－－＋－－－－－－－－－－－－－－－－－－－
  ファイル名  ｜  内      容          ｜   ファイル形式
－－－－－－－＋－－－－－－－－－－－＋－－－－－－－－－－－－－－－－－－－
  _STARTUP.O  ｜  スタートアップ部    ｜   オブジェクトファイル
  _STACK.O    ｜  スタックエリア部    ｜   オブジェクトファイル
  _STACK.C    ｜  スタックエリア部    ｜   Ｃソースファイル 
－－－－－－－＋－－－－－－－－－－－＋－－－－－－－－－－－－－－－－－－－

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
第２章  各ファイルの概要

■２．１  _STARTUP.Oの概要

_STARTUP.Oでは、Ｃ言語で操作できない CPU の各種レジスタの初期化、初期メッセー
ジの表示、main() 関数の呼び出し、main() 関数から復帰後の処理を行います。

■２．２  _STACK.O の概要

_STACK.O では、スタック領域が定義されています。
このファイルは製品出荷状態の_STACK.Cをコンパイルしオブジェクト化したもので、_ST
ARTUP.Oと共にリンクする必要があります。

■２．３  _STACK.C の概要

_STACK.C では、スタック領域が定義されています。
初期状態のままのスタックサイズ（３２Ｋバイト）を使用する場合は、このファイルは
必要ありませんが、ユーザーが任意のスタックサイズを定義して使いたい場合は、この
Ｃソースファイルを書き換えてコンパイル、リンクする必要があります。

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
第３章  各ファイルの詳細仕様

３－１  _STARTUP.Oの詳細仕様

_STARTUP.O では、グローバルシンボルとして、以下のシンボルが定義されます。
－－－－－－－＋－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
  シンボル    ｜  内        容
－－－－－－－＋－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
  __start     ｜  デバッガでの実行開始アドレス
  exit        ｜  main関数の戻り先、ソフトリセット
－－－－－－－＋－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

_STARTUP.O では、外部定義シンボルとして、以下のシンボルを参照します。

－－－－－－－＋－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
  シンボル    ｜  内        容
－－－－－－－＋－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
  main        ｜  main関数の先頭アドレス
   _stk_top   ｜  スタックエリアの最終アドレス＋１
－－－－－－－＋－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

_STARTUP.Oでは、以下の処理を行います。

１）spレジスタを設定します。
セグメント名stk_bss（bss 属性のセグメント）のラベル _stk_topをspレジスタに設定
します。ラベル _stk_topは、_STACK.O または _STACK.C で定義されています。

２）gp レジスタを設定します。
セグメント名gdseg（gp data属性のセグメント）のラベル_Sgdsegをgpレジスタに設定
します。ラベル _Sgdsegはリンカが自動で生成します。
_STARTUP.Oの中でgdseg領域に４バイト確保していますので、あえて他のソースでnear
識別子を使わなくても_Sgdsegは定義されます。

３）キャッシュクリアとキャッシュオフをします。
CPUのchcwレジスタを操作し、キャッシュをクリアした後、キャッシュモードをオフしま
す。キャッシュのオンはユーザーがライブラリ関数cache_enable()で行います。

４）CPUのpswレジスタを操作し、割り込みを禁止します。

５）ＰＳＧ音源の出力を止め、HuC6273とHuC6270の表示モードをHuC6270にします。

６）メッセージ表示を行います。
メッセージは、固定メッセージが表示されます。文字フォントは、全角１６×１６ドッ
ト、半角８×１６ドットが使用されます。

メッセージの内容は以下の通りです。
＋－－－－－－－－－－－－－－－－－－＋
｜　　　　  お客様へのお願い　　　　　｜
｜　　　　　　　　　　　              ｜
｜　本ソフトウェアは営利目的としないも｜
｜のです。　　　　　　　　　　　　　　｜
｜  また、本ソフトウェア内の　　　　　｜
｜_STARTUP.O（初期化プログラム）は    ｜
｜ＮＥＣホームエレクトロニクスより営利｜
｜目的としないことを条件に使用許諾され｜
｜ており、改変は行わないでください。　｜
｜ 　　　　　　　　　　　　　　       ｜
｜　尚、本ソフトウェアの責任については｜
｜ＮＥＣホームエレクトロニクスは一切負｜
｜わないものとします。　　　　　　　  ｜
＋－－－－－－－－－－－－－－－－－－＋

７）１０秒間表示します。この間にRUNボタンかＩボタンを押すと次に進みます。
マウスがつながっている場合は左ボタンを押すと次に進みます。

８）画面の消去を行います。
画面を、消去した後、RUNボタンかＩボタンが押されているならば離されるまで待ちま
す。マウスがつながっていて左ボタンが押されている場合も離されるまで待ちます。

９）main()関数の呼び出しを行います。
main()関数を呼び出した段階では、ＰＣ－ＦＸＧＡは以下のような状態になっていま
す。
・CPU の割り込みは禁止状態
・CPU のレジスタはsp,gp,linkレジスタを除き、すべて不定
・周辺チップの割り込みはすべてマスク状態
・周辺チップの状態はすべて不定
・画面表示デバイスはすべて非表示状態
・割り込みベクタはすべて不定

10）すべての割り込みを禁止して、ＰＳＧ音源の出力を止め、HuC6273とHuC6270の表示
    モードをHuC6270にもどしてから、soft_reset()関数の呼び出しを行います。

通常、main()関数から復帰する事は許されませんが、万が一main()関数から復帰した場
合を考えsoft_reset() 関数を呼び出し IPL_ROMの初期状態に移行します。
exit()関数の入り口は、main()関数の戻り先と同じになっていますので、exit()を呼び
出した場合も、この処理を行います。

■３．２  _STACK.O,_STACK.Cの詳細仕様

_STACK.C _STACK.O では、以下のセグメント、データ、領域、シンボル定数が定義され
ます。
ユーザーが変更可能なのはSTACK_SIZEの定義のみです。他の項目を修正したり、プログ
ラムを追加したりしないでください。正しく動作しなくなります。

－－－－－－－－－－－－＋－－－－－－－－－－－－－－－＋－－－－－－－－－－
  内    容              ｜  定  義  方  法              ｜  条    件
－－－－－－－－－－－－＋－－－－－－－－－－－－－－－＋－－－－－－－－－－
  スタックサイズの定義  ｜  #define STACK_SIZE 32768    ｜  ユーザー変更可能
  セグメントの定義      ｜  #pragma defseg(-B,_stk_bss) ｜  ユーザー変更不可
  セグメントの切り替え  ｜  #pragma seg(_stk_bss)       ｜  ユーザー変更不可
  スタックエリアの配列  ｜  int _stkarea[STACK_SIZE/4]  ｜  ユーザー変更不可
  spレジスタの初期値    ｜  int _stk_top                ｜  ユーザー変更不可
－－－－－－－－－－－－＋－－－－－－－－－－－－－－－＋－－－－－－－－－－

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
第４章  ユーザープログラムへの組み込み例

■４．１  main()関数を作る

まずmain()関数が必要です。エディターで作成してください。
メイン関数のサンプル例（ファイル名はMAIN.Cとする）

main()
{
}

■４．２  Ｃコンパイラでコンパイル＆リンクする

４．１で作成したMAIN.Cをコンパイルしてリンクする場合

>FXCC _STARTUP.O MAIN.C _STACK.O

これで、A.EXの実行ファイルが出来上がります。
MAIN.Cで色々な処理を入れた場合は、当然各種ライブラリをリンクするとか、他の.C
を指定することになります。

VLIB.AとSUB.Cが必要な場合

>FXCC _STARTUP.O MAIN.C SUB.C VLIB.A _STACK.O

■４．３  リンカでリンクする

まず、Ｃコンパイラでは-cオプションを指定して、.Oファイルを作る所で止めます。
>FXCC -c MAIN.C

つぎに、リンカーで実行ファイルを作るわけですが、そのまま指定すると、先頭の.Oフ
ァイルと同じ名前の実行ファイル(_STARTUP.EX)を作ってしまいますので、-oオプショ
ンで実行ファイル名(A.EX)を指定してください。

>FXLK -o A.EX -P8000 _STARTUP.O MAIN.O _STACK.O

MAIN.Cで色々な処理を入れた場合は、当然各種ライブラリをリンクするとか、他の.O
を指定することになります。
VLIB.AとSUB.Oが必要な場合

>FXLK -o A.EX -P8000 _STARTUP.O MAIN.O SUB.O VLIB.A _STACK.O

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

《著作権及び登録商標等》

・_STARTUP.O、_STACK.O、_STACK.C 及び STARTUP.TXT（以下、"本ソフトウェア"とい
  う）は、ＰＣ－ＦＸＧＡ用のソフトウェア開発ツールの一部です。本ソフトウェア
  を、ＰＣ－ＦＸ、ＰＣ－ＦＸＧＡ用のソフトウェア開発以外の目的で使用しないで下
  さい。

・本ソフトウェアを使用した結果、直接及び間接的に生じた損害について、株式会社ハ
  ドソンは、一切の責任または債務を負わないものとします。

・本ソフトウェアの操作方法、技術的内容、その他の質問について、株式会社ハドソン
  では、直接お答えしていません。お問い合わせはご遠慮下さい。

・本ソフトウェアの使用に際し、「ソフトウェアのご使用条件」をよくご覧いただき、
  ご利用下さいますようお願い致します。

・本ソフトウェアの著作権は、株式会社ハドソンが保有しています。


MS-DOSは米国マイクロソフト社の登録商標です。
その他、記載されている会社名、製品名は、各社の登録商標または商標です。


                                                            (C)1995 HUDSON SOFT

